/**
 * @file lv_demo_music.h
 * @brief lrc文件解析文件头文件
 */

#ifndef LRC_PARSER_H
#define LRC_PARSER_H


/**********************
 *   INCLUDE
 **********************/
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

/*********************
 *      TYPEDET
 *********************/

// 歌词时间标签结构体
typedef struct {
    int minute;        // 分钟
    int second;        // 秒
    int millisecond;   // 毫秒
    long timestamp;    // 总毫秒数
} LyricTime;

// 歌词行结构体
typedef struct LyricLine {
    LyricTime time;           // 时间标签
    char* text;               // 歌词文本
    struct LyricLine* next;   // 下一行指针
    struct LyricLine* prev;   // 上一行指针
} LyricLine;

// 歌词文件信息结构体
typedef struct {
    char* title;       // 歌曲标题
    char* artist;      // 艺术家
    char* album;        //专辑
    char* genre;      // 音乐流派
    int length;         // 歌曲总时长（秒）
    char* by;          // 编辑者
    int offset;        // 时间偏移量(毫秒)

    char* filename;   // 文件名
    char* condition;    //运动状况

    int line_count;    // 总行数
    LyricLine* lines;  // 歌词行链表
} LrcFile;

/**********************
 * GLOBAL PROTOTYPES
 **********************/
// 函数声明
LrcFile* lrc_parse_file(const char* filename);
void lrc_free(LrcFile* lrc);
LyricLine* lrc_get_current_line(LrcFile* lrc, long current_time);
void lrc_print_info(LrcFile* lrc);
int lrc_save_to_file(LrcFile* lrc, const char* filename);
int init_music_data_from_lrc(const char* folder_path);
#endif
